Shell Scriptは関数指向で書く
Shell Scriptは手続的に書くと辛いが、考え方を返ると割と良い感じになる
処理対象のデータは標準入力で受け取る
pipeを多用する
いちいち変数定義とかしない
forと配列は使用しない
代わりにwhileとread -rを使う ref
入力用の.txtを用意しといて、それを入力として渡す
$ cat data.txt | hoge
テンプレ
code:ex.sh
awk 1 |
while read -r line
do
echo "$line" |
nkf -W8MQ |
sed 's/=$//' |
...
done
$ chmod +x ./ex.sh
$ cat input.txt | ./ex.sh
awk 1がないと最終行が処理されなかったmrsekut.icon
もっと良い方法あるかも
コマンドは基本的に標準入力から受け取るもの、と考える
fileから入力できる方が例外
echoとcatが重宝する
https://qiita.com/piroor/items/77233173707a0baa6360#重宝するぞ-echoとcat
配列は使わない
代わりにwhileと、read -rの組み合わせを使う
https://qiita.com/piroor/items/77233173707a0baa6360#繰り返し処理は配列ではなくイテレータで
#??
Unixコマンドは直交性が良いので、ShellScriptで関数作るときも直交性を意識すれば、元のコマンドと同等の直交具合を保ったままプログラミングができそう、というのを思う
とはいえ、細かく関数に切るわけでも無いので、関数志向の手続き型感があるmrsekut.icon
だから、1行1行の意図が分かりづらい
出力の整形のためにsed -e 's|^ | |'とか書いてても、これだけじゃ推測できない
参考
プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話 - Qiita
良い記事mrsekut.icon*4
https://please-sleep.cou929.nu/bash-strict-mode.html
https://qiita.com/piroor/items/0cb44663430bfc66c204